home *** CD-ROM | disk | FTP | other *** search
/ C/C++ Users Group Library 1996 July / C-C++ Users Group Library July 1996.iso / vol_100 / 146_01 / fsize.txt < prev    next >
Text File  |  1985-03-09  |  3KB  |  146 lines

  1.   NAM BINARY FILE SIZE ANALYZER
  2.  OPT PAG
  3.  
  4. * This routine reads a binary file and prints the
  5. *  load addresses of the file, as well as transfer
  6. *  address(es), if any.
  7.  
  8. * Usage:
  9. * +++FSIZE,Filename[.CMD]
  10.  
  11. * --- FLEX POINTERS ---
  12.  
  13. WARMS EQU $AD03 DOS RE-ENTRY
  14. GETFIL EQU $AD2D GET FILE SPEC
  15. SETEXT EQU $AD33 SET DEFAULT EXTENSION
  16. RPTERR EQU $AD3F REPORT ERROR
  17. PSTRNG EQU $AD1E PRINT STRING
  18. ADDBX EQU $AD36 ADD B REG TO X REG
  19. OUTADR EQU $AD45 OUTPUT HEX ADDRESS
  20. PUTCHR EQU $AD18 PRINT CHARACTER
  21.  
  22. FMS EQU $B406
  23. FMSCLS EQU $B403
  24.  
  25. FCB EQU $A840
  26.  
  27.   ORG $A100
  28.  
  29. FSIZE BRA FSZ1
  30.  FCB 1 VERSION NUMBER
  31.  
  32. FSZ1 LDX #FCB POINT TO FCB
  33.  JSR GETFIL GET FILE SPEC
  34.  BCC FSZOK IF NO ERRORS BRANCH AROUND
  35. FSZ11 JMP FSZERR
  36. FSZOK LDA A #1 SET UP CODE
  37.  STA A 0,X FOR READ OPEN
  38.  INC A
  39.  JSR SETEXT SET .CMD EXTENSION
  40.  JSR FMS CALL FMS - DO OPEN
  41.  BNE FSZ11
  42.  LDA A #$FF
  43.  STA A 59,X SET NO COMPRESS
  44.  
  45. FSZ2 LDX #FCB POINT TO FCB
  46.  JSR FMS CALL FMS - GET CHAR
  47.  BNE FSZTST ERROR ?
  48.  CMP A #$16 TRANSFER ADDRESS ?
  49.  BEQ FSZ5
  50.  CMP A #$02 START OF RECORD ?
  51.  BNE FSZ2
  52.  
  53. *  OK, GET THE ADDRESS AND PRINT IT
  54.  
  55.  BSR FADDR
  56.  BNE FSZERR
  57.  LDX #FMSG1
  58.  JSR PSTRNG PRINT MESSAGE
  59.  LDX #FTEMP POINT TO ADDRESS
  60.  JSR OUTADR AND PRINT IT
  61.  LDA B #4
  62.  LDX #FMSG3
  63.  
  64. FSZ3 LDA A 0,X
  65.  JSR PUTCHR PRINT CHAR
  66.  INX
  67.  DEC B
  68.  BNE FSZ3
  69.  
  70.  LDX #FCB
  71.  JSR FMS GET SIZE OF RECORD
  72.  BNE FSZTST
  73.  STA A FCNT SAVE IT
  74.  TAB
  75.  DEC B ADJUST COUNT
  76.  LDX FTEMP GET ADDRESS
  77.  JSR ADDBX
  78.  STX FTEMP STORE END ADDRESS
  79.  LDX #FTEMP
  80.  JSR OUTADR PRINT END ADDRESS
  81.  
  82. FSZ4 LDX #FCB
  83.  JSR FMS GET CHAR
  84.  BNE FSZERR
  85.  DEC FCNT ALL DONE
  86.  BNE FSZ4
  87.  
  88.  BRA FSZ2 GET NEXT RECORD
  89.  
  90. *  GET TRANSFER ADDRESS AND PRINT IT.
  91.  
  92. FSZ5 BSR FADDR GET ADDRESS
  93.  BNE FSZERR
  94.  LDX #FMSG2
  95.  JSR PSTRNG PRINT MESSAGE
  96.  LDX #FTEMP
  97.  JSR OUTADR 
  98.  
  99.  BRA FSZ2 GET NEXT RECORD
  100.  
  101. * ------------
  102.  
  103. FSZTST LDA A 1,X GET ERROR STATUS
  104.  CMP A #8 IS IT EOF ?
  105.  BNE FSZERR
  106.  LDA A #4 CLOSE FILE CODE
  107.  STA A 0,X
  108.  JSR FMS CLOSE THE FILE
  109.  BNE FSZERR
  110.  JMP WARMS RETURN TO FLEX
  111.  
  112. FSZERR JSR RPTERR REPORT THE ERROR
  113.  JSR FMSCLS CLOSE ALL FILES
  114.  JMP WARMS
  115.  
  116. * -------------
  117.  
  118. *  SUBROUTINE TO LOAD AN ADDRESS FROM THHE DISK FILE
  119.  
  120. FADDR LDX #FCB
  121.  JSR FMS GET ADDRESS MSB
  122.  BEQ FADDR1 SKIP IF NO ERRORS
  123.  RTS
  124.  
  125. FADDR1 STA A FTEMP
  126.  LDX #FCB
  127.  JSR FMS GET ADDRESS LSB
  128.  BEQ FADDR2
  129.  RTS
  130.  
  131. FADDR2 STA A FTEMP+1
  132.  CLR A SET ZERO BIT
  133.  RTS
  134.  
  135. * ------------
  136.  
  137. FTEMP RMB 2
  138. FCNT RMB 1
  139. FMSG1 FCC 'LOAD ADDRESS: '
  140.  FCB 4
  141. FMSG2 FCC 'XFER ADDRESS: '
  142.  FCB 4
  143. FMSG3 FCC ' TO '
  144.  
  145.  END FSIZE
  146.